#include <stdio.h>
#include <stdlib.h>
#include "msgQLib.h"
#include "config.h"
#include "tacheTraitementErreurs.h"
#include "string.h"
 

int TraitementErreurs(MSG_Q_ID idBalErreurs, MSG_Q_ID idBalIHM,  MSG_Q_ID idBalLogs)
{
	moteur_TraitementErreurs(idBalErreurs,  idBalIHM,   idBalLogs);
}

void moteur_TraitementErreurs(MSG_Q_ID idBalErreurs, MSG_Q_ID idBalIHM,  MSG_Q_ID idBalLogs)
{
	for(;;)
	{
		MESSAGE_LOG_ERR message;
		MESSAGE_IHM messageIHM;
		
		msgQReceive(idBalErreurs, (char*) &message, sizeof(MESSAGE_LOG_ERR), WAIT_FOREVER );


		// Si l'arret de l'application a ete lance, on se suicide oO
		if(message.type == LOG_EXIT)
		{
			// envoi du message d'arret de l'appplication a la tache reseau
			messageIHM.type = MESSIHM_REPONSE;
			messageIHM.typeObjet = 0;
			strcpy(messageIHM.message, "arret");
			msgQSend(idBalIHM,(char*) &messageIHM, sizeof(MESSAGE_IHM),WAIT_FOREVER,MSG_PRI_NORMAL);
			
			// suicide
			return;
		}

		// Sinon c'est un message d'erreur, on doit l'envoyer a l'IHM pour engager le dialogue.
		if(message.type == MESS_ERREUR)
		{
			// Recopie dans le MESSAGE_IHM des informations identiques au MESSAGE_LOG_ERR
			messageIHM.type = MESSIHM_ERREUR;
			messageIHM.heures = message.h;
			messageIHM.minutes = message.min;
			messageIHM.secondes = message.sec;
			strcpy(messageIHM.message,"panne");
			
			
			// Ecriture du message selon le type d'erreur
			if(message.type_erreur==ERR_FILM_PLASTIQUE_EN_PANNE)
			{
				messageIHM.typeObjet = 10;
			}
			if(message.type_erreur==ERR_IMPRIMANTE_EN_PANNE)
			{
				messageIHM.typeObjet = 1;
			}
			if(message.type_erreur==ERR_PALETTES_EN_PANNE)
			{
				messageIHM.typeObjet = 5;
			}
			if(message.type_erreur==ERR_TAUX_PIECES_DEFECTUEUSES)
			{
				messageIHM.typeObjet = 6;
			}
			if(message.type_erreur==ERR_COMMANDE_NON_PRETE)
			{
				messageIHM.typeObjet = 9;
			}

			// Engagement du dialogue avec l'IHM
			msgQSend(idBalIHM,(char*) &messageIHM, sizeof(MESSAGE_IHM),WAIT_FOREVER,MSG_PRI_NORMAL);

			// Envoi du message dans la boite de log
			msgQSend(idBalLogs,(char*) &message, sizeof(MESSAGE_LOG_ERR), WAIT_FOREVER, MSG_PRI_NORMAL);
		}

	}
}
